home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / modules / yoonoPrefs.js < prev    next >
Text File  |  2009-12-16  |  6KB  |  212 lines

  1. var EXPORTED_SYMBOLS = ["YOONO_PREFS"];
  2.  
  3. var yoono = {};
  4. var log = {info:function() {},debug:function() {},warn:function(){},error:function (){},fatal:function(){}};
  5.  
  6. // Globals
  7. const CI = Components.interfaces;
  8. const CL = Components.classes;
  9. const PREFSSERVICE = CL["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefService);
  10. const WMED = CL['@mozilla.org/appshell/window-mediator;1'].getService(CI.nsIWindowMediator);
  11. const DIRSERVICE = CL['@mozilla.org/file/directory_service;1'].getService(CI.nsIProperties);
  12. const PREFS = PREFSSERVICE.getBranch("extensions.yoono.");
  13.  
  14.  
  15. function Prefs() {
  16.     this.wrappedJSObject=this;
  17.     
  18.     // constructeur
  19.     PREFSSERVICE.QueryInterface(CI.nsIPrefBranch2);
  20.     PREFSSERVICE.addObserver("extensions.yoono.debug", this, false);
  21.     this.loadAllPrefs();
  22. }
  23.  
  24. Prefs.prototype.init = function (y) {
  25.     yoono = y;
  26.     log = y.log;
  27. }
  28.  
  29. Prefs.prototype.getPrefType = function (name) {
  30.   return(PREFS.getPrefType(name));
  31. }
  32.  
  33. Prefs.prototype.get = function (name) {
  34.   try {
  35.     var type = PREFS.getPrefType(name);
  36.     switch (type) {
  37.     case PREFS.PREF_STRING :
  38.       return PREFS.getCharPref(name);
  39.     case PREFS.PREF_BOOL :
  40.       return PREFS.getBoolPref(name);
  41.     case PREFS.PREF_INT :
  42.       return PREFS.getIntPref(name);
  43.     default :
  44.       log.warn('Prefs.getPref unknown type for pref :  ' + name);
  45.       break;
  46.     }
  47.   } catch(e) {
  48.     log.exception("Prefs.getPref : '" + name + "': ", e);
  49.   }
  50.   return null;
  51. }
  52.  
  53. Prefs.prototype.traverseBrowsers = function (fun) {
  54.     var windowsenum = WMED.getEnumerator("navigator:browser");
  55.     var win;
  56.     while (windowsenum.hasMoreElements()) {
  57.         win = windowsenum.getNext();
  58.         fun (win);
  59.     }
  60. }
  61.  
  62. Prefs.prototype.loadAllPrefs = function () {
  63.     var prefName, type;
  64.     var childArray = PREFS.getChildList('', {});
  65.     for (var i = childArray.length ; i-- > 0 ; ) {
  66.         prefName = childArray[i];
  67.         type = PREFS.getPrefType(prefName);
  68.         this.loadPref(prefName, type);
  69.     }
  70. }
  71.  
  72. Prefs.prototype.loadPref = function (aprefName, type) {
  73.   log.debug('loading pref');
  74.   // Is it an update ?
  75.   var update = false;
  76.   var release = '';
  77.   try {
  78.     release = PREFS.getCharPref('release');
  79.     update = true;
  80.   } catch(e) {
  81.   }
  82.   // Check if pref nosynchro exists
  83.   try {
  84.     var noSync = PREFS.getBoolPref('nosynchro');
  85.   } catch(e) {
  86.     // Exception means either pref nosync did not exist (first install), or was set to 
  87.     // false while false was default (releases before 5)
  88.     // or true while true was default (releases since 5)
  89.     // 'release' existance and value allows to know which case it is
  90.     if(update) {
  91.       // The user left the original default value: set it to that value
  92.       // Check if previous release was 4 (release number is not yet updated at
  93.       // this point)
  94.       // in releases before 5, default was false
  95.       if(release.substring(0,1) < '5') {
  96.         PREFS.setBoolPref('nosynchro', false);
  97.       } else {
  98.         PREFS.setBoolPref('nosynchro', true);
  99.       }
  100.     } else {
  101.       // The pref did not exist because this is an installation
  102.       PREFS.setBoolPref('nosynchro', true);
  103.     } 
  104.   } 
  105.   try {
  106.     switch (type) {
  107.     case PREFS.PREF_STRING :
  108.       this[aprefName] = PREFS.getCharPref(aprefName);
  109.       break;
  110.     case PREFS.PREF_BOOL :
  111.       this[aprefName] = PREFS.getBoolPref(aprefName);
  112.       break;
  113.     case PREFS.PREF_INT :
  114.       this[aprefName] = PREFS.getIntPref(aprefName);
  115.       break;
  116.     default :
  117.       log.error('error loading pref : ' + aprefName);
  118.       break;
  119.     }
  120.   } catch(e) {
  121.     log.error('error loading pref : ' + aprefName+" - "+e);
  122.   }
  123. };
  124.  
  125. Prefs.prototype.resetSynchro = function () {
  126.     this.reset('synchroaction');
  127.     this.reset('synchroask');
  128. };
  129.  
  130. // on ajuste dynamiquement les fonctions de log
  131. // selon la valeur de debug
  132. Prefs.prototype.observe = function(aSubject, aTopic, aData) {
  133.     if (aTopic != "nsPref:changed" ) {
  134.         log.info ('aTopic != nsPref:changed : ' + aTopic);
  135.         return;
  136.     }
  137.     this.loadPref('debug.level', PREFS.PREF_INT);
  138. };
  139.  
  140. /*
  141.     @param option
  142.     @param value
  143.     @param type : optionnel
  144. */
  145. // on sauvegarde automatiquement
  146. Prefs.prototype.set = function (option, value, type) {
  147.     //log.debug("set : " + option + ' : ' + value);
  148.     this[option] = value;
  149.     if (type != PREFS.PREF_STRING && type != PREFS.PREF_BOOL && type != PREFS.PREF_INT) {
  150.         type = PREFS.getPrefType(option);
  151.     }
  152.   if (type==PREFS.PREF_INVALID) {
  153.     if (typeof value=="boolean")
  154.       type = PREFS.PREF_BOOL;
  155.     else if (typeof value=="number")
  156.       type = PREFS.PREF_INT;
  157.     else
  158.       type = PREFS.PREF_STRING;
  159.   }
  160.     switch (type) {
  161.     case PREFS.PREF_STRING :
  162.         PREFS.setCharPref(option, value);
  163.         break;
  164.     case PREFS.PREF_BOOL :
  165.         PREFS.setBoolPref(option, value);
  166.         break;
  167.     case PREFS.PREF_INT :
  168.         PREFS.setIntPref(option, value);
  169.         break;
  170.   default :
  171.     log.error('error setting pref : ' + option + " type="+type);
  172.         break;
  173.     }
  174. };
  175.  
  176. Prefs.prototype.reset = function (option) {
  177.     if (PREFS.prefHasUserValue(option)) {
  178.         PREFS.clearUserPref(option);
  179.         this.loadPref(option, PREFS.getPrefType(option));
  180.     }
  181. };
  182.  
  183. /**
  184. * @return true if bookmarks.html has changed (based on lastModifiedTime).
  185. **/
  186. Prefs.prototype.storeLastModified = function (aSource) {
  187.     var aProfDir = DIRSERVICE.get("ProfD",CI.nsIFile);
  188.     aProfDir.append("places.sqlite");
  189.     
  190.     var aBookmarksLastModified = null;
  191.     if (aProfDir.exists()) { // FF3
  192.         aBookmarksLastModified = aProfDir.lastModifiedTime;
  193.     } else { // FF2
  194.         aProfDir = DIRSERVICE.get("ProfD",CI.nsIFile);
  195.         aProfDir.append("bookmarks.html");
  196.         aBookmarksLastModified = aProfDir.lastModifiedTime;
  197.     }
  198.     var aBookmarksLastModified = aProfDir.fileSize;
  199.     var aResult = true;
  200.     var aPreviousLastModified = PREFS.getCharPref("bookmarksLastModified");
  201.     log.debug("previous:"+aPreviousLastModified+" / current:"+aBookmarksLastModified);
  202.     if( aPreviousLastModified == aBookmarksLastModified ) {
  203.         aResult = false;
  204.     }
  205.     this.set("bookmarksLastModified",aBookmarksLastModified,PREFS.PREF_STRING);
  206.     return aResult;
  207. }
  208.  
  209.  
  210.  
  211. var YOONO_PREFS = new Prefs();
  212.